-- 装备图鉴
local Msg = require("core.Msg")
local EquipExcel = require("excel.equip").equip
local EquipRareExcel = require("excel.equip").rare
local ItemDefine = require("bag.ItemDefine")
local Grid = require("bag.Grid")
local EquipLogic = require("equip.EquipLogic")
local BagLogic = require("bag.BagLogic")
local EquipLogicGrid = require("equip.EquipLogicGrid")
local Lang = require("common.Lang")
local Broadcast = require("broadcast.Broadcast")
local HeroLogic = require("hero.HeroLogic")
local Util = require("common.Util")
local HeroGrowUp = require("absAct.HeroGrowUp")

-- 取出合适的装备
local function getEquipGrid(human, bagIndex, heroUuid, pos)
    local equipGrid = human.db.equipBag[bagIndex]
    if not equipGrid then 
       -- 取英雄身上的
       local heroGrid = HeroLogic.getHeroGridByUuid(human, heroUuid)
       if not heroGrid then return end

       equipGrid = heroGrid.equip and heroGrid.equip[pos]

       return equipGrid, heroGrid
    end

    return equipGrid
end


-- 查询装备图鉴 全部信息
function fenjieQuey(human, inputList)
    local indexTable = { }
    for i = 1, inputList[0] do
        local index = inputList[i]
        local equipGrid = human.db.equipBag[index]
        if not equipGrid then
            return
        end

        if not EquipRareExcel[equipGrid.quality] then return end

        if indexTable[index] then
            -- 重复id
            return
        end
        indexTable[index] = true
    end

    local itemList = { }
    for i = 1, inputList[0] do
        local index = inputList[i]
        local equipGrid = human.db.equipBag[index]

        local equipConfig = EquipExcel[equipGrid.id]
        if not equipConfig then return end

        for k, v in ipairs(EquipRareExcel[equipGrid.quality].disassembly) do
            itemList[v[1]] = itemList[v[1]] or 0
            itemList[v[1]] = itemList[v[1]] + v[2]
        end
    end

    local msgRet = Msg.gc.GC_EQUIP_FEN_JIE_QUERY
    local len = 0
    for k, v in pairs(itemList) do
       len = len + 1
       Grid.makeItem(msgRet.list[len], k, v)
    end
    msgRet.list[0] = len
    Msg.send(msgRet, human.fd)
end


-- 查询装备图鉴 全部信息
function fenjieDo(human, inputList)
    local indexTable = { }
    for i = 1, inputList[0] do
        local index = inputList[i]
        local equipGrid = human.db.equipBag[index]
        if not equipGrid then
            return
        end

        if not EquipRareExcel[equipGrid.quality] then return end

        if indexTable[index] then
            -- 重复id
            return
        end
        indexTable[index] = true
    end

    local itemList = { }
    for i = 1, inputList[0] do
        local index = inputList[i]
        local equipGrid = human.db.equipBag[index]

        local equipConfig = EquipExcel[equipGrid.id]
        if not equipConfig then return end

        for k, v in ipairs(EquipRareExcel[equipGrid.quality].disassembly) do
            itemList[v[1]] = itemList[v[1]] or 0
            itemList[v[1]] = itemList[v[1]] + v[2]
        end

        EquipLogic.delEquip(human, index, "equip_fenjie")
		HeroGrowUp.onCallback(human, HeroGrowUp.TASKTYPE21, 1)
    end

    BagLogic.addItemList(human, itemList, "equip_fenjie")

    local msgRet = Msg.gc.GC_EQUIP_FEN_JIE_DO
    Msg.send(msgRet, human.fd)
end

-- 洗练查询
function randomQuery(human, bagIndex, heroUuid, pos)
    local equipGrid = getEquipGrid(human, bagIndex, heroUuid, pos)
    if not equipGrid then return end

    local rareExcel = EquipRareExcel[equipGrid.quality]
    if not rareExcel then return end

    local msgRet = Msg.gc.GC_EQUIP_RAMDOM_QUERY
    Grid.makeItem(msgRet.equipOld, equipGrid.id, 1, nil, equipGrid, bagIndex)

    -- 当前洗练属性
    local washAttr = equipGrid.washAttr
    local washQuality = equipGrid.washQuality
    msgRet.equipNew[0] = 0
    if washAttr and washQuality then
        local washEquipGrid = EquipLogicGrid.createTempGrid(equipGrid.id, equipGrid.washAttr, equipGrid.washQuality)
        Grid.makeItem(msgRet.equipNew[1], washEquipGrid.id, 1, nil, washEquipGrid, bagIndex)
        msgRet.equipNew[0] = 1
    end

    msgRet.needItem[0] = #rareExcel.rebirth
    for i = 1, msgRet.needItem[0] do
       Grid.makeItem(msgRet.needItem[i], rareExcel.rebirth[i][1], rareExcel.rebirth[i][2])
    end

    Msg.send(msgRet, human.fd)
end

-- 已穿戴的装备
function putList(human, pos)
    local msgRet = Msg.gc.GC_EQUIP_PUT_LIST
    local cnt = 0
    for index = 1, human.db.heroBag[0] do
        local heroGrid = human.db.heroBag[index]
        if heroGrid and heroGrid.lv >= 2 then
            -- 所有部位
            if pos == 0 then
                for i = 1, ItemDefine.EQUIP_MAX_CNT do
                    local equipGrid = heroGrid.equip and heroGrid.equip[i]
                    if equipGrid then
                        cnt = cnt + 1
                        local net = msgRet.putList[cnt]
                        if i ~= ItemDefine.EQUIP_SUBTYPE_SHUIJIN then
                            Grid.makeItem(net.equip, equipGrid.id, 1, nil, equipGrid)
                            net.pos = i
                        end

                        if cnt >= 10 then
                            msgRet.isEnd = 0
                            msgRet.putList[0] = cnt
                            Msg.send(msgRet, human.fd)
                            cnt = 0
                        end
                    end
                end
            else
                local equipGrid = heroGrid.equip and heroGrid.equip[pos]
                if equipGrid then
                    cnt = cnt + 1
                    local net = msgRet.putList[cnt]
                    if i ~= ItemDefine.EQUIP_SUBTYPE_SHUIJIN then
                        Grid.makeItem(net.equip, equipGrid.id, 1, nil, equipGrid)
                        net.pos = pos
                    end

                    if cnt >= 10 then
                        msgRet.isEnd = 0
                        msgRet.putList[0] = cnt
                        Msg.send(msgRet, human.fd)
                        cnt = 0
                    end
                end
            end
        end
    end
    msgRet.isEnd = 1
    msgRet.putList[0] = cnt
    Msg.send(msgRet, human.fd)
end

-- 洗练
function randomDo(human, bagIndex, heroUuid, pos)
    local equipGrid = getEquipGrid(human, bagIndex, heroUuid, pos)
    if not equipGrid then return end

    local rareExcel = EquipRareExcel[equipGrid.quality]
    if not rareExcel then return end

    for i = 1, #rareExcel.rebirth do
       local needItemID = rareExcel.rebirth[i][1]
       local needItemCnt = rareExcel.rebirth[i][2]
       local nowItemCnt = BagLogic.getItemCnt(human, needItemID)
	   if nowItemCnt < needItemCnt then 
	   	  return Broadcast.sendErr(human, Util.format(Lang.XIANZHI_NO_ITEM, ItemDefine.getValue(needItemID,"name")))
	   end
    end

    for i = 1, #rareExcel.rebirth do
       local needItemID = rareExcel.rebirth[i][1]
       local needItemCnt = rareExcel.rebirth[i][2]
       BagLogic.delItem(human, needItemID, needItemCnt, "equip_wash")
    end
    

    local attr, quality = EquipLogic.randomAttr(equipGrid.id, true, equipGrid.quality)
    equipGrid.washAttr = attr
    equipGrid.washQuality = quality

    HeroGrowUp.onCallback(human, HeroGrowUp.TASKTYPE19, 1)

    Broadcast.sendErr(human, Lang.EQUIP_WASH_RANDOM_SUC)
    randomQuery(human, bagIndex, heroUuid, pos)
end

-- 洗练查询
function randomSave(human, bagIndex, heroUuid, pos)
    local equipGrid, heroGrid = getEquipGrid(human, bagIndex, heroUuid, pos)
    if not equipGrid then return end

    local washAttr = equipGrid.washAttr
    local washQuality = equipGrid.washQuality
    if not washAttr or not washQuality then return end

    equipGrid.attr = washAttr
    equipGrid.quality = washQuality
    equipGrid.washAttr = nil
    equipGrid.washQuality = nil
    EquipLogic.checkAttr(equipGrid)
    -- 更新背包的
    if not heroGrid then   
       EquipLogic.sendEquipChange(human, bagIndex, equipGrid, EquipLogic.EQUIP_BAG_OP_CHANGE)
    end

    Broadcast.sendErr(human, Lang.EQUIP_WASH_SAVE_SUC)
    randomQuery(human, bagIndex, heroUuid, pos)
end